package com.jingxuan.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.jingxuan.entity.Product;

@Mapper
public interface ProductsMapper {

    /**
     * 根据关键词搜索商品 - 改进版，支持智能匹配
     */
    List<Product> searchProducts(@Param("keyword") String keyword,
                                 @Param("exactKeyword") String exactKeyword,
                                 @Param("prefixKeyword") String prefixKeyword,
                                 @Param("typeExactKeyword") String typeExactKeyword,
                                 @Param("typePrefixKeyword") String typePrefixKeyword,
                                 @Param("preciseFuzzyKeyword") String preciseFuzzyKeyword,
                                 @Param("platformId") Integer platformId,
                                 @Param("offset") int offset,
                                 @Param("limit") int limit);

    /**
     * 获取商品总数 - 改进版
     */
    Integer countProducts(@Param("keyword") String keyword,
                         @Param("exactKeyword") String exactKeyword,
                         @Param("prefixKeyword") String prefixKeyword,
                         @Param("typeExactKeyword") String typeExactKeyword,
                         @Param("typePrefixKeyword") String typePrefixKeyword,
                         @Param("preciseFuzzyKeyword") String preciseFuzzyKeyword,
                         @Param("platformId") Integer platformId);

    /**
     * 根据ID获取商品
     */
    Product selectById(@Param("id") String id);

    /** 
     * 获取相似商品
     */
    List<Product> findSimilarProducts(@Param("type") String type,
                                      @Param("platformId") Integer platformId,
                                      @Param("excludeProductId") String excludeProductId,
                                      @Param("limit") int limit);

    /**
     * 更新商品信息
     */
    int updateProduct(Product product);

    /**
     * 获取所有不重复的商品类型
     */
    List<String> selectAllProductTypes();

    /**
     * 根据id列表查询商品列表
     */
    List<Product> selectByIds(@Param("ids") List<String> ids);

    /**
     * 插入商品
     */
    int insert(Product product);

    /**
     * 删除商品
     */
    int deleteById(@Param("id") String id);

    /**
     * 后台商品列表
     */
    List<Product> selectProductList(@Param("keyword") String keyword,
                                    @Param("offset") int offset,
                                    @Param("limit") int limit);

    /**
     * 后台商品总数
     */
    int countProductList(@Param("keyword") String keyword);

    /**
     * 根据type字段精确匹配搜索商品
     */
    List<Product> searchProductsByType(@Param("type") String type,
                                      @Param("platformId") Integer platformId,
                                      @Param("offset") int offset,
                                      @Param("limit") int limit);

    /**
     * 根据type字段精确匹配获取商品总数
     */
    int countProductsByType(@Param("type") String type,
                           @Param("platformId") Integer platformId);

    /**
     * 根据品牌+产品类型组合搜索商品
     */
    List<Product> searchBrandTypeProducts(@Param("keyword") String keyword,
                                        @Param("brand") String brand,
                                        @Param("type") String type,
                                        @Param("platformId") Integer platformId,
                                        @Param("offset") int offset,
                                        @Param("limit") int limit);

    /**
     * 获取品牌+产品类型组合搜索的商品总数
     */
    int countBrandTypeProducts(@Param("keyword") String keyword,
                              @Param("brand") String brand,
                              @Param("type") String type,
                              @Param("platformId") Integer platformId);
}
